#include <stdio.h>
#include <stdlib.h>
#include "piece.h"
#include "coupdame.h"
#include "echiquier.h"

void coupdame (int echiquier[8][8], struct piece piec, int tabretourpiece[30][2],int &nbrecoup)
{
   int j,i,k,l,m,n,o,p;

   j=i=k=l=m=n=o=p=1;
/* Variables permettant de coder les déplacements de la dame dans les 8 directions autorisés (horizontales,
verticales et diagonales, d'avant en arrière et de haut en bas)
utilisé aussi pour déterminer nbrecoup */

 if (echiquier[piec.ligne][piec.colonne]>0)
// test si la dame appartient au joueur 1
           {

           while (echiquier[piec.ligne][piec.colonne+i]<=0 && piec.colonne+i < 8 && piec.colonne >= 0 && piec.ligne<8 && piec.ligne>= 0)
           //boucle qui test si le déplacement verticale vers le bas est possible
            {


                    tabretourpiece[i-1][0]= piec.ligne;
                    tabretourpiece[i-1][1]= piec.colonne+i;
                    i++;

		    if (echiquier[piec.ligne][piec.colonne+i-1]<0) //si l'on rencontre une pièce adverse on sort de la boucle
                     {
                         break;
                     }


            }
            i--; //on décrémente i car la variable est initialisée a 1

            while (echiquier[piec.ligne][piec.colonne-j]<=0 && piec.colonne < 8 && piec.colonne-j >= 0 && piec.ligne<8 && piec.ligne>= 0)
            {
                tabretourpiece[i+j-1][0]= piec.ligne;
                tabretourpiece[i+j-1][1]= piec.colonne-j;

                j++;
                if (echiquier[piec.ligne][piec.colonne-j+1]<0)
                     {
                         break;
                     }

            }
            j--;
            while (echiquier[piec.ligne+k][piec.colonne]<=0 && piec.colonne < 8 && piec.colonne >= 0 && piec.ligne+k <8 && piec.ligne>= 0)
            {
               tabretourpiece[i+j+k-1][0]= piec.ligne+k;
               tabretourpiece[i+j+k-1][1]= piec.colonne;
               k++;
               if (echiquier[piec.ligne+k-1][piec.colonne]<0)
                     {
                         break;
                     }

            }
            k--;
            while (echiquier[piec.ligne-l][piec.colonne]<=0 && piec.colonne < 8 && piec.colonne >= 0 && piec.ligne<8 && piec.ligne-l >= 0)
            {
                tabretourpiece[i+j+k+l-1][0]= piec.ligne-l;
                tabretourpiece[i+j+k+l-1][1]= piec.colonne;
                l++;
                if (echiquier[piec.ligne][piec.colonne-l+1]<0)
                     {
                         break;
                     }

            }
            l--;
            while (echiquier[piec.ligne+m][piec.colonne+m]<=0 && piec.colonne+m < 8 && piec.colonne >= 0 && piec.ligne+m <8 && piec.ligne>= 0)
            {
                tabretourpiece[i+j+k+l+m-1][0]=piec.ligne+m;
                tabretourpiece[i+j+k+l+m-1][1]=piec.colonne+m;
                m++;
                if (echiquier[piec.ligne+m-1][piec.colonne+m-1]<0)
                     {
                         break;
                     }

            }
            m--;
            while (echiquier[piec.ligne-n][piec.colonne-n]<=0 && piec.colonne < 8 && piec.colonne-n >= 0 && piec.ligne<8 && piec.ligne-n>= 0)
            {
                tabretourpiece[i+j+k+l+m+n-1][0]=piec.ligne-n;
                tabretourpiece[i+j+k+l+m+n-1][1]=piec.colonne-n;
                n++;
                if (echiquier[piec.ligne-n+1][piec.colonne-n+1]<0)
                     {
                         break;
                     }

            }
            n--;
             while (echiquier[piec.ligne+o][piec.colonne-o]<=0 && piec.colonne < 8 && piec.colonne-o >= 0 && piec.ligne+o <8 && piec.ligne>= 0)
            {
                tabretourpiece[i+j+k+l+m+n+o-1][0]=piec.ligne+o;
                tabretourpiece[i+j+k+l+m+n+o-1][1]=piec.colonne-o;
                o++;
                if (echiquier[piec.ligne+o-1][piec.colonne-o+1]<0)
                     {
                         break;
                     }


            }
            o--;
             while (echiquier[piec.ligne-p][piec.colonne+p]<=0 && piec.colonne+p < 8 && piec.colonne >= 0 && piec.ligne<8 && piec.ligne-p>= 0)
            {
                tabretourpiece[i+j+k+l+m+n+o+p-1][0]=piec.ligne-p;
                tabretourpiece[i+j+k+l+m+n+o+p-1][1]=piec.colonne+p;
                p++;
                if (echiquier[piec.ligne-p+1][piec.colonne+p-1]<0)
                     {
                         break;
                     }

            }
           }


            else
            {

                while (echiquier[piec.ligne][piec.colonne+i]>=0 && piec.colonne+i < 8 && piec.colonne >= 0 && piec.ligne<8 && piec.ligne>= 0)
            {


                    tabretourpiece[i-1][0]= piec.ligne;
                    tabretourpiece[i-1][1]= piec.colonne+i;
                    i++;

		    if (echiquier[piec.ligne][piec.colonne+i-1]>0)
                     {
                         break;
                     }


            }
            i--;

            while (echiquier[piec.ligne][piec.colonne-j]>=0 && piec.colonne < 8 && piec.colonne-j >= 0 && piec.ligne<8 && piec.ligne>= 0)
            {
                tabretourpiece[i+j-1][0]= piec.ligne;
                tabretourpiece[i+j-1][1]= piec.colonne-j;

                j++;
                if (echiquier[piec.ligne][piec.colonne-j+1]>0)
                     {
                         break;
                     }

            }
            j--;
            while (echiquier[piec.ligne+k][piec.colonne]>=0 && piec.colonne < 8 && piec.colonne >= 0 && piec.ligne+k <8 && piec.ligne>= 0)
            {
               tabretourpiece[i+j+k-1][0]= piec.ligne+k;
               tabretourpiece[i+j+k-1][1]= piec.colonne;
               k++;
               if (echiquier[piec.ligne+k-1][piec.colonne]>0)
                     {
                         break;
                     }

            }
            k--;
            while (echiquier[piec.ligne-l][piec.colonne]>=0 && piec.colonne < 8 && piec.colonne >= 0 && piec.ligne<8 && piec.ligne-l >= 0)
            {
                tabretourpiece[i+j+k+l-1][0]= piec.ligne-l;
                tabretourpiece[i+j+k+l-1][1]= piec.colonne;
                l++;
                if (echiquier[piec.ligne][piec.colonne-l+1]>0)
                     {
                         break;
                     }

            }
            l--;
            while (echiquier[piec.ligne+m][piec.colonne+m]>=0 && piec.colonne+m < 8 && piec.colonne >= 0 && piec.ligne+m <8 && piec.ligne>= 0)
            {
                tabretourpiece[i+j+k+l+m-1][0]=piec.ligne+m;
                tabretourpiece[i+j+k+l+m-1][1]=piec.colonne+m;
                m++;
                if (echiquier[piec.ligne+m-1][piec.colonne+m-1]>0)
                     {
                         break;
                     }

            }
            m--;
            while (echiquier[piec.ligne-n][piec.colonne-n]>=0 && piec.colonne < 8 && piec.colonne-n >= 0 && piec.ligne<8 && piec.ligne-n>= 0)
            {
                tabretourpiece[i+j+k+l+m+n-1][0]=piec.ligne-n;
                tabretourpiece[i+j+k+l+m+n-1][1]=piec.colonne-n;
                n++;
                if (echiquier[piec.ligne-n+1][piec.colonne-n+1]>0)
                     {
                         break;
                     }

            }
            n--;
             while (echiquier[piec.ligne+o][piec.colonne-o]>=0 && piec.colonne < 8 && piec.colonne-o >= 0 && piec.ligne+o <8 && piec.ligne>= 0)
            {
                tabretourpiece[i+j+k+l+m+n+o-1][0]=piec.ligne+o;
                tabretourpiece[i+j+k+l+m+n+o-1][1]=piec.colonne-o;
                o++;
                if (echiquier[piec.ligne+o-1][piec.colonne-o+1]>0)
                     {
                         break;
                     }


            }
            o--;
             while (echiquier[piec.ligne-p][piec.colonne+p]>=0 && piec.colonne+p < 8 && piec.colonne >= 0 && piec.ligne<8 && piec.ligne-p>= 0)
            {
                tabretourpiece[i+j+k+l+m+n+o+p-1][0]=piec.ligne-p;
                tabretourpiece[i+j+k+l+m+n+o+p-1][1]=piec.colonne+p;
                p++;
                if (echiquier[piec.ligne-p+1][piec.colonne+p-1]>0)
                     {
                         break;
                     }

            }
            }
            p--;
            nbrecoup=i+j+k+l+n+o+p+m;//nbrecoup est égale à la somme des incrémentations

}
